#include <vector>
#include <algorithm>
using namespace std;
/*
 * @lc app=leetcode.cn id=137 lang=cpp
 *
 * [137] 只出现一次的数字 II
 */

// @lc code=start
class Solution {
public:
    // 进制转换的角度
    // int singleNumber(vector<int>& nums) {
    //     int ans = 0, total = 0;
    //     for (int i = 0; i < 32; i++) {
    //         total = 0;
    //         for (int j = 0; j < nums.size(); j++) {
    //             total += ((nums[j] >> i) & 1);
    //         }
    //         if (total % 3) {
    //             ans |= 1 << i;
    //         }
    //     }
    //     return ans;
    // }

    // 门电路设计角度
    int singleNumber(vector<int>& nums) {
        int a = 0, b = 0;
        for (int x: nums) {
            b = ~a & (x ^ b);
            a = ~b & (x ^ a);
        }
        return b;
    }
};
// @lc code=end

